package com.Algorithm.Study.map;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: zjz
 * @Date: 2021/10/26/13:16
 * @Description: 涉及:1.图的两个(点集合(编号,Node),边集合)  2.点中的next点集合,边集合 3.边中的对象(图的边集需要)
 *                   4.图的点集合依据图的from,to..同样点的in,out也依据
 * @Target: 一个路径的生成
 */
public class GraphGenerator {
    public static Graph createGraph(Integer[][] matrix) {
        Graph graph = new Graph();   // 新建一个图
        for (int i = 0; i < matrix.length; i++) {
            Integer weight = matrix[i][0];  // 二维表的权重列
            Integer from = matrix[i][1];  // 二维表的from,出发的位置
            Integer to = matrix[i][2];    // 二维表的to,到达的位置
            if (!graph.nodes.containsKey(from)) {   // 看看图的点集有没有from.没就加
                graph.nodes.put(from, new Node(from));
            }
            if (!graph.nodes.containsKey(to)) {   // 看看图的点集有没有to.没就加
                graph.nodes.put(to, new Node(to));
            }
            Node fromNode = graph.nodes.get(from);  // 点-->依据from
            Node toNode = graph.nodes.get(to);  // 点--->依据to
            Edge newEdge = new Edge(weight, fromNode, toNode); // 新的边,需要权重,from点,to点
            fromNode.nexts.add(toNode);  // 点中的next集合增加
            fromNode.out++;
            toNode.in++;
            fromNode.edges.add(newEdge);  // 点中的边集合增加
            graph.edges.add(newEdge);  // 图的边集增加
        }
        return graph;
    }
}
